/*
    冒泡排序
*/
#include<stdio.h>
const int numbers_size=8;
int numbers[]={49,38,65,97,76,13,27,49};
void swap(int* a,int* b){//交换原变量的值
    int temp=*a;
    (*a)=*b;
    (*b)=temp;
}

void show(int array[],int n){
    for(int i=0;i<n;i++){
        printf("%d ",array[i]);
    }
    printf("\n");
}
//和王道的书不太一样
void bubble_sort(int array[],int n){
    //i用来表示趟数，不表示下标，实际元素交换用j表示，
    //冒泡排序，最多n趟排完，所以可以用for，当然while死循环可以的
    for(int i=0;i<n;i++){
        int flag=0;//标记是否发生了交换
        for(int j=n-2;j>=i;j--){//倒着冒泡，从倒数第二个元素开始,注意下标，最左端要取到第0号元素
            if(array[j]>array[j+1]){
                swap(&array[j],&array[j+1]);
                flag=1;
            }
        }
        if(flag==0){//没有发生交换，就停止排序
            return;
        }
        show(numbers,numbers_size);
    }

}


int main(void){
    bubble_sort(numbers,numbers_size);
    show(numbers,numbers_size);
    return 0;
}